package 前缀和;

import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ResultTreeType;
import com.sun.org.apache.xerces.internal.dom.DOMErrorImpl;

/**
 * @PackageName: 前缀和
 * @ClassName: LeetCode1413
 * @Author: chen jinxu
 * @Date: 2022/8/9 21:53
 * @Description: //逐步求和得到正数的最小值
 *
 * 给你一个整数数组 nums。你可以选定任意的正数 startValue 作为初始值。
 * 你需要从左到右遍历 nums数组，并将 startValue 依次累加上nums数组中的值。
 * 请你在确保累加和始终大于等于 1 的前提下，选出一个最小的正数作为 startValue 。
 *
 * 输入：nums = [-3,2,-3,4,2]
 * 输出：5
 * 解释：如果你选择 startValue = 4，在第三次累加时，和小于 1
 *       输入：nums = [1,2]
 * 输出：1
 * 解释：最小的 startValue 需要是正数。
 * 输入：nums = [1,-2,-3]
 * 输出：5
 */
public class LeetCode1413 {
    public static void main(String[] args) {
        System.out.println(minStartValue(new int[] {-3,2,-3,4,2}));
        System.out.println(minStartValue(new int[] {1,2}));
        System.out.println(minStartValue(new int[] {1,-2,-3}));
    }

    public static int minStartValue(int[] nums) {
        int result = 0;
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
            result += nums[i];
            min = Math.min(min, result);
        }
        if (min > 0) {
            return 1;
        }
        return 1 - min;
    }
}
